package com.ruoyi.service.traceability;

import com.ruoyi.domain.traceability.MesTraceabilityRecord;
import java.util.List;

/**
 * 追溯记录Service接口
 * 
 * @author ruoyi
 * @date 2024-01-01
 */
public interface IMesTraceabilityRecordService {
    /**
     * 查询追溯记录
     * 
     * @param traceId 追溯记录主键
     * @return 追溯记录
     */
    public MesTraceabilityRecord selectMesTraceabilityRecordByTraceId(Long traceId);

    /**
     * 查询追溯记录列表
     * 
     * @param mesTraceabilityRecord 追溯记录
     * @return 追溯记录集合
     */
    public List<MesTraceabilityRecord> selectMesTraceabilityRecordList(MesTraceabilityRecord mesTraceabilityRecord);

    /**
     * 新增追溯记录
     * 
     * @param mesTraceabilityRecord 追溯记录
     * @return 结果
     */
    public int insertMesTraceabilityRecord(MesTraceabilityRecord mesTraceabilityRecord);

    /**
     * 修改追溯记录
     * 
     * @param mesTraceabilityRecord 追溯记录
     * @return 结果
     */
    public int updateMesTraceabilityRecord(MesTraceabilityRecord mesTraceabilityRecord);

    /**
     * 批量删除追溯记录
     * 
     * @param traceIds 需要删除的追溯记录主键集合
     * @return 结果
     */
    public int deleteMesTraceabilityRecordByTraceIds(Long[] traceIds);

    /**
     * 删除追溯记录信息
     * 
     * @param traceId 追溯记录主键
     * @return 结果
     */
    public int deleteMesTraceabilityRecordByTraceId(Long traceId);

    /**
     * 根据工单ID查询追溯记录
     * 
     * @param workOrderId 工单ID
     * @return 追溯记录列表
     */
    public List<MesTraceabilityRecord> selectTraceabilityByWorkOrderId(Long workOrderId);

    /**
     * 根据批次号查询追溯记录
     * 
     * @param batchCode 批次号
     * @return 追溯记录列表
     */
    public List<MesTraceabilityRecord> selectTraceabilityByBatchCode(String batchCode);

    /**
     * 根据产品ID查询追溯记录
     * 
     * @param productId 产品ID
     * @return 追溯记录列表
     */
    public List<MesTraceabilityRecord> selectTraceabilityByProductId(Long productId);

    /**
     * 根据追溯类型查询追溯记录
     * 
     * @param traceType 追溯类型
     * @return 追溯记录列表
     */
    public List<MesTraceabilityRecord> selectTraceabilityByType(String traceType);

    /**
     * 校验追溯编码是否唯一
     * 
     * @param traceCode 追溯编码
     * @return 结果
     */
    public String checkTraceCodeUnique(String traceCode);

    /**
     * 批量插入追溯记录
     * 
     * @param traceabilityRecords 追溯记录列表
     * @return 结果
     */
    public int batchInsertTraceabilityRecord(List<MesTraceabilityRecord> traceabilityRecords);
}